#include "Auto.h"

Auto::Auto() {
	this->pos = 0;
}

Auto::Auto(int id, Semaforo * lecturaSalida, Semaforo * escrituraSalida) {
	this->id = id;
	this->pos = 0;
	this->tiempoCirculando = Utils::calcularRandom(
			Utils::MAX_TIEMPO_AUTO_CIRCULANDO);
	this->tiempoEnEstacionar = Utils::calcularRandom(
			Utils::MAX_TIEMPO_AUTO_EN_ESTACIONAR);
	this->cantHoras = Utils::calcularRandom(Utils::MAX_TIEMPO_AUTO_ESTACIONADO);
	this->lecturaSalida = lecturaSalida;
	this->escrituraSalida = escrituraSalida;
}

void Auto::estacionar() {
	cout << "Ingreso el auto : " << this->getId() << " y va a ocupar la pos : "
			<< this->getPos() << endl;
	sleep(Utils::calcularRandom(4)); //Circula buscando su lugar.
	sleep(Utils::calcularRandom(4)); //Estaciona en su plaza.
	sleep(Utils::calcularRandom(4)); //Deja el auto "cantHoras" estacionado.
}

void Auto::salir() {
	cout << "Se fue el auto : " << this->getId() << " desocupando la pos : "
			<< this->getPos() << endl;
	Fifo salida(Utils::NOMBRE_ARCHIVO_SALIDA);
	this->escrituraSalida->p();
	this->lecturaSalida->v();
	salida.escribir((char*) this, sizeof(Auto));
	//cout << salida.getFd() << endl;
	salida.cerrar();
}

int Auto::getTiempoEnEstacionar() {
	return tiempoEnEstacionar;
}

void Auto::setTiempoEnEstacionar(int timpoEnEstacionar) {
	this->tiempoEnEstacionar = timpoEnEstacionar;
}

int Auto::getCantHoras() {
	return cantHoras;
}

void Auto::setCantHoras(int cantHoras) {
	this->cantHoras = cantHoras;
}

int Auto::getTiempoCirculando() {
	return tiempoCirculando;
}

void Auto::setTiempoCirculando(int timpoCirculando) {
	this->tiempoCirculando = timpoCirculando;
}

int Auto::getId() {
	return id;
}

int Auto::getPos() {
	return this->pos;
}

void Auto::setPos(int pos) {
	this->pos = pos;
}

Auto::~Auto() {
	// TODO Auto-generated destructor stub
}

